interface LookUpCat {
  type: 'cat'
  breeds: 'Abyssinian' | 'Shorthair' | 'Curl' | 'Bengal'
}

interface LookUpDog {
  type: 'dog'
  breeds: 'Hound' | 'Brittany' | 'Bulldog' | 'Boxer'
  color: 'brown' | 'white' | 'black'
}

type MyDog = LookUp<LookUpCat | LookUpDog, 'dog'> // expected to be `LookUpDog`

type LookUp<T, P> = T extends { type: P } ? T : never

// type TestExclude<L, R> = L extends R ? never : L;

// type Result = TestExclude<'a' | 'b' | 'c', 'b'>